//
//  FinAuthLiveV5DetectConfig.h
//  FinAuthLiveV5Detect
//
//  Created by FinAuthDev on 2024/2/16.
//

#ifndef FinAuthLiveV5DetectConfig_h
#define FinAuthLiveV5DetectConfig_h

@class FinAuthLiveV5DetectError;

//  活体检测集成方式，默认值为为`FinAuthLiveV5DetectModel_A`
typedef enum : NSUInteger {
    FinAuthLiveV5DetectModel_A           =  1,  //  默认集成方式，在SDK内部通过网络请求进行授权和活体配置的获取，需要配合指定的`hostURL`参数使用。
    FinAuthLiveV5DetectModel_C           =  3,  //  兼容性集成方式，在SDK内部通过网络请求仅进行授权，活体配置需要用户主动传入，需要配合指定的`hostURL`和`configInfo`参数使用。
    FinAuthLiveV5DetectModel_E           =  5,  //  数据透传集成方式，在SDK内部不进行任何的网络请求。所有网络请求的请求体数据通过block传递给APP，部分数据需要由APP进行网络请求后再使用block回传给SDK。
} FinAuthLiveV5DetectModel;

//  活体检测语言类型，默认值为`FinAuthLiveV5DetectLanguageTypeCh`
typedef enum : NSUInteger {
    FinAuthLiveV5DetectLanguageTypeCh           =  0,  //  中文
    FinAuthLiveV5DetectLanguageTypeRu           =  2,  //  俄语
} FinAuthLiveV5DetectLanguageType;

//  活体检测设备垂直检测类型，默认值为`FinAuthLiveV5DetectPhoneVerticalTypeDisable`
typedef enum : NSUInteger {
    FinAuthLiveV5DetectPhoneVerticalTypeContinue          =  1,  //  启用设备垂直检测
    FinAuthLiveV5DetectPhoneVerticalTypeFront2            =  2,  //  仅在检测开启的2秒内启用，之后关闭该功能
    FinAuthLiveV5DetectPhoneVerticalTypeDisable           =  3,  //  禁用设备垂直检测
} FinAuthLiveV5DetectPhoneVerticalType;

//  活体检测提示UI效果类型，默认值为`FinAuthLiveV5DetectRemindUITypeDefault`
typedef enum : NSUInteger {
    FinAuthLiveV5DetectRemindUITypeDefault                =  0,  //  提示效果一行模式
    FinAuthLiveV5DetectRemindUITypeMultipleLine           =  1,  //  提示效果多行模式，最多支持三行
} FinAuthLiveV5DetectRemindUIType;

//  活体检测错误类型
typedef enum : NSUInteger {
    FinAuthLiveV5DetectErrorTypeOK                                = 1000,
    FinAuthLiveV5DetectErrorTypeBizTokenDenied                    = 1001,
    FinAuthLiveV5DetectErrorTypeIllegalParameter                  = 1002,
    FinAuthLiveV5DetectErrorTypeAuthenticationFail                = 1003,
    FinAuthLiveV5DetectErrorTypeMobileNotSupport                  = 1004,
    FinAuthLiveV5DetectErrorTypeNullPointException                = 1005,
    FinAuthLiveV5DetectErrorTypeRequestFrequently                 = 1006,
    FinAuthLiveV5DetectErrorTypeNetworkTimeout                    = 1007,
    FinAuthLiveV5DetectErrorTypeInternalError                     = 1008,
    FinAuthLiveV5DetectErrorTypeInvalidBundleID                   = 1009,
    FinAuthLiveV5DetectErrorTypeNetworkError                      = 1010,
    FinAuthLiveV5DetectErrorTypeUserCancel                        = 1011,
    FinAuthLiveV5DetectErrorTypeNoCameraPermission                = 1012,
    FinAuthLiveV5DetectErrorTypeNoCameraSupport                   = 1013,
    FinAuthLiveV5DetectErrorTypeFaceInitFail                      = 1014,
    FinAuthLiveV5DetectErrorTypeLivenessFailure                   = 1016,
    FinAuthLiveV5DetectErrorTypeGotoBackground                    = 1017,
    FinAuthLiveV5DetectErrorTypeLivenessTimeout                   = 1018,
    FinAuthLiveV5DetectErrorTypeDataUploadFail                    = 1019,
    FinAuthLiveV5DetectErrorTypeNFCUserQuit                       = 1020,
    FinAuthLiveV5DetectErrorTypeNFCSystemQuit                     = 1021,
    FinAuthLiveV5DetectErrorTypeScreenNoSupport                   = 1022,
    FinAuthLiveV5DetectErrorTypeScreenNoPermission                = 1023,
    FinAuthLiveV5DetectErrorTypeScreenRecordFail                  = 1024,
    FinAuthLiveV5DetectErrorTypeScreenWriteFail                   = 1025,
    FinAuthLiveV5DetectErrorTypeNoAudioPremission                 = 1026,
    FinAuthLiveV5DetectErrorTypeVideoRecordFail                   = 1027,
} FinAuthLiveV5DetectErrorType;

/**
 FinAuth活体检测配置接口管理器网络响应状态Block。该参数仅在集成方案E时有效。请在默认线程或者非主线程中调用该block。回到主线程中调用该block，会导致网络卡顿，直到超时。
 */
typedef void(^FinAuthLiveV5NetworkResponseBlock)(NSDictionary* responseDict);

/**
 FinAuth活体检测配置接口管理器网络请求状态Block。该参数仅在集成方案E时有效。该block内部为子线程。如果需要进行UI操作，请手动回到主线程。
 networkType为SDK内部网络请求的类型，请根据网络类型选择不同的接口进行网络请求。
 当networkType为1时，bizTokenStr和dataStr，configResponse有效。请使用datasync接口，并配置data_type为1。
 当networkType为2时，bizTokenStr和dataStr有效。请使用datasync接口，并配置data_type为2。

 */
typedef void(^FinAuthLiveV5NetworkRequestBlock)(int networkType, NSString* bizTokenStr, NSString* dataStr, FinAuthLiveV5NetworkResponseBlock configResponse);

/**
 FinAuth活体检测配置接口管理器加载状态Block。
 */
typedef void(^FinAuthLiveV5StartDetectBlock)(FinAuthLiveV5DetectError* error, NSDictionary* extraOutDict);

/**
 FinAuth活体检测配置接口检测完成时Block。该阶段，仅代表检测完成，进行数据回传。检测页面未开始收起。
 */
typedef void(^FinAuthLiveV5EndDetectBlock)(FinAuthLiveV5DetectError* error, NSString* bizTokenStr, NSDictionary* extraOutDict);

/**
 FinAuth活体检测配置接口页面收起完成时Block。
 */
typedef void(^FinAuthLiveV5DismissBlock)(void);

#endif /* FinAuthLiveV5DetectConfig_h */
